"""
js逆向小tips
1抓取 登录相关的包  基本都是和 login关键字 相关的
2抓取 注册的包 基本都是 跟 regedit关键字 相关的
3进入search  搜password相关的 也是 找login相关的   大部分
4注意在进行密码相关的js逆向途中就不要100%以表单结构为准

5看到log可以pass  日志
6在搜索过程中 关键字数量过大 可以加上特殊符号减少搜索范围   比如" " 比如":"  比如"="
{ dsad:dsada}   s="dsad"   s = "dsadad"
7看到 encryptPassword: encrypt关键字 要注意

8
var s = new JSEncrypt;
s.setPublicKey(t.data.key);
var a = s.encrypt(t.data.hash + e);
复制这几个位置需要手动的 把参数 写死    更改代码部分

9ReferenceError: JSEncrypt is not defined
由于作用域问题 get方法 想通过源文件的 自执行方法里面的 JSEncrypt类实例化对象 失败
解决方案  通过把 JSEncrypt 赋值到 window这个对象里面


总结 rsa加密算法 加密流程
找到以下 关键代码
第一大步
    1，实例化 rsa对象     js代码   非demo=demo1()    而是var ddd= new JSencrpyt;
    2. 通过实例化的rsa对象 设置公钥  代码步骤
    3. 对文本进行加密  用到 加密方法
第二大步
    找加密（定义位置）
    定义位置 在整个方法里面就全抠
    如果不是就扣取包含加密方法的 代码
第三大步
    补代码   作用域问题 更改变量的作用域
    两种方法
    将原本的封装到对象里面的 加密类
    t.JSEncrypt = ze   改写  JSEncrypt = ze
    第二种
    将包含所有的方法的类（ze）放到全局的window下作为属性
    window.JSEncrypt=ze
"""


import execjs

with open("rsa.js","r",encoding="utf-8")as f:
    jsdata=f.read()
# js代码执行器对象exe
exe=execjs.compile(jsdata)
passwordmi=exe.call("get")
print(passwordmi)
